package LeetCode;

//给定一个会议时间安排的数组，每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei)，
// 为避免会议冲突，同时要考虑充分利用会议室资源，请你计算至少需要多少间会议室，才能满足这些会议安排。
// 输入: [[0, 30],[5, 10],[15, 20]]
//输出: 2

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;

public class Code253_meetingRoom2 {

    public int minMeetingRooms(List<List<Integer>> intervals) {
        Collections.sort(intervals, new Comparator<List<Integer>>() {
            @Override
            public int compare(List<Integer> o1, List<Integer> o2) {
                return o1.get(0) - o2.get(0);
            }
        });
        PriorityQueue<Integer> endTimes = new PriorityQueue<>();
        endTimes.offer(intervals.get(0).get(1));
        for (int i = 1; i < intervals.size(); i++) {
            if (intervals.get(i).get(0) >= endTimes.peek()){
                endTimes.poll();
            }
            endTimes.offer(intervals.get(i).get(1));
        }
        return endTimes.size();
    }

}
